Windows Application Development-এ Background Task তৈরি করা একটি গুরুত্বপূর্ণ প্রক্রিয়া, যা অ্যাপ্লিকেশনটির ইউজার ইন্টারফেস (UI) থ্রেডকে ব্লক না করে ব্যাকগ্রাউন্ডে ভারী কাজ (যেমন ডেটা প্রসেসিং, নেটওয়ার্ক কলস, ইত্যাদি) সম্পন্ন করতে সাহায্য করে।
এছাড়া, Task Trigger ব্যবহার করে আপনার ব্যাকগ্রাউন্ড টাস্কগুলো নির্দিষ্ট সময় বা ইভেন্টের মাধ্যমে ট্রিগার করা যায়। এই টিউটোরিয়ালে ব্যাকগ্রাউন্ড টাস্ক তৈরি এবং তার ট্রিগার কনফিগারেশন নিয়ে আলোচনা করা হবে।
১. Background Task তৈরি করা
WPF, WinUI 3, এবং UWP (Universal Windows Platform)-এ ব্যাকগ্রাউন্ড টাস্ক সাধারণত Task.Run বা async/await প্যাটার্ন ব্যবহার করে তৈরি করা হয়। এটি মূলত অ্যাসিঙ্ক্রোনাস অপারেশন পরিচালনা করে যাতে UI থ্রেড মুক্ত থাকে এবং অ্যাপ্লিকেশন রেসপন্সিভ থাকে।
উদাহরণ: Task.Run ব্যবহার করে Background Task তৈরি
using System;
using System.Threading.Tasks;
using System.Windows;
namespace BackgroundTaskExample
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private async void StartBackgroundTaskButton_Click(object sender, RoutedEventArgs e)
{
// ব্যাকগ্রাউন্ড টাস্ক রান করা
string result = await Task.Run(() => LongRunningTask());
MessageBox.Show(result); // টাস্ক শেষ হলে রেজাল্ট দেখানো
}
private string LongRunningTask()
{
// একটি দীর্ঘ-running কাজের উদাহরণ
System.Threading.Thread.Sleep(5000); // ৫ সেকেন্ড অপেক্ষা
return "Task Completed!";
}
}
}
ব্যাখ্যা:
- Task.Run: ব্যাকগ্রাউন্ড থ্রেডে LongRunningTask মেথডটি চালানো হয়।
- async/await: অ্যাসিঙ্ক্রোনাস ফাংশন ব্যবহার করে UI থ্রেডকে ব্লক না করে ব্যাকগ্রাউন্ড টাস্ক সম্পন্ন হয়।
- Thread.Sleep: একটি ডেমো ডিলে, যা একটি সিম্পল দীর্ঘ-running কাজের প্রতিনিধিত্ব করে।
২. Task Trigger Configuration
Task Trigger ব্যবহৃত হয় নির্দিষ্ট সময় বা নির্দিষ্ট ইভেন্টের ভিত্তিতে ব্যাকগ্রাউন্ড টাস্ক চালানোর জন্য। এটি Task Scheduler অথবা Time Trigger এর মাধ্যমে অ্যাপ্লিকেশনকে নির্দিষ্ট সময়ের পরে বা ইউজারের ইন্টারঅ্যাকশন অনুযায়ী ট্রিগার করা যায়।
উদাহরণ ১: Timer Trigger ব্যবহার করে Task চালানো
using System;
using System.Threading.Tasks;
using System.Windows;
using System.Threading;
namespace BackgroundTaskWithTimer
{
public partial class MainWindow : Window
{
private Timer _timer;
public MainWindow()
{
InitializeComponent();
InitializeBackgroundTaskTimer();
}
private void InitializeBackgroundTaskTimer()
{
// Timer ব্যবহার করে ব্যাকগ্রাউন্ড টাস্ক প্রতিদিনের নির্দিষ্ট সময়ে চালানো
_timer = new Timer(ExecuteBackgroundTask, null, TimeSpan.Zero, TimeSpan.FromSeconds(10));
}
private void ExecuteBackgroundTask(object state)
{
// ব্যাকগ্রাউন্ডে কাজ চলবে
Task.Run(() => LongRunningTask());
}
private void LongRunningTask()
{
// দীর্ঘ-running কাজ
System.Threading.Thread.Sleep(5000); // ৫ সেকেন্ড অপেক্ষা
Dispatcher.Invoke(() => MessageBox.Show("Background Task Completed!"));
}
}
}
ব্যাখ্যা:
- Timer: এখানে একটি
Timerব্যবহার করা হয়েছে, যা প্রতি ১০ সেকেন্ড পর পর ব্যাকগ্রাউন্ড টাস্ক চালাবে। - TimeSpan.Zero: এটি কাজ শুরু করার জন্য প্রথমে ০ সেকেন্ড অপেক্ষা করে।
- Task.Run: ব্যাকগ্রাউন্ড থ্রেডে কাজ পরিচালনা করা হচ্ছে।
৩. UI Interaction Trigger (Button Click Event)
অ্যাপ্লিকেশনটির UI-তে কোন ইভেন্টের মাধ্যমে ব্যাকগ্রাউন্ড টাস্ক চালানো গেলে, ব্যবহারকারী সহজেই অ্যাপ্লিকেশনে ইন্টারঅ্যাকশন করতে পারে।
<Window x:Class="BackgroundTaskExample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Background Task Example" Height="350" Width="525">
<Grid>
<Button Content="Start Background Task" HorizontalAlignment="Center" VerticalAlignment="Center" Click="StartBackgroundTaskButton_Click"/>
</Grid>
</Window>
C# কোড:
private async void StartBackgroundTaskButton_Click(object sender, RoutedEventArgs e)
{
// বাটনে ক্লিক করার পর ব্যাকগ্রাউন্ড টাস্ক শুরু হবে
string result = await Task.Run(() => LongRunningTask());
MessageBox.Show(result);
}
- Button Click Event: বাটনে ক্লিক করলেই ব্যাকগ্রাউন্ড টাস্ক রান শুরু হয়, এবং কাজ শেষ হলে রেজাল্ট দেখানো হয়।
৪. Time Trigger with System Background Task (Windows 10/11)
Windows 10 এবং 11-এ, Windows Task Scheduler বা Background Tasks API ব্যবহার করে নির্দিষ্ট সময়ে কাজ করতে পারবেন।
উদাহরণ: Windows Task Scheduler API ব্যবহার
using Windows.ApplicationModel.Background;
public void RegisterBackgroundTask()
{
var builder = new BackgroundTaskBuilder();
builder.Name = "MyBackgroundTask";
builder.TaskEntryPoint = "MyNamespace.MyBackgroundTask";
builder.SetTrigger(new TimeTrigger(15, false)); // 15 মিনিটে একবার ট্রিগার হবে
BackgroundTaskRegistration task = builder.Register();
}
- TimeTrigger: এটি অ্যাপ্লিকেশনের ব্যাকগ্রাউন্ড টাস্কটি নির্দিষ্ট সময়ের পর পর চালাতে ব্যবহৃত হয়।
- BackgroundTaskRegistration: এটি ব্যাকগ্রাউন্ড টাস্ক রেজিস্টার করে এবং নির্দিষ্ট ট্রিগার সেট করে।
৫. Error Handling and Task Completion
ব্যাকগ্রাউন্ড টাস্কের সময় ত্রুটি হ্যান্ডলিং এবং টাস্ক কমপ্লিশন ম্যানেজমেন্ট করা গুরুত্বপূর্ণ।
public async Task ExecuteBackgroundTask()
{
try
{
// দীর্ঘ-running কাজ
await Task.Delay(5000); // ৫ সেকেন্ডের জন্য অপেক্ষা
MessageBox.Show("Task Completed Successfully!");
}
catch (Exception ex)
{
MessageBox.Show($"Error: {ex.Message}");
}
}
ব্যাখ্যা:
- try/catch: ব্যাকগ্রাউন্ড টাস্কের মধ্যে কোনো ত্রুটি হলে তা হ্যান্ডল করা।
- Task.Delay: একটি সিমুলেটেড কাজের জন্য ব্যবহৃত হয়েছে, যা ৫ সেকেন্ডের জন্য বিলম্ব সৃষ্টি করে।
উপসংহার
Background Task তৈরি এবং Task Trigger Configuration Windows অ্যাপ্লিকেশনের পারফরম্যান্স এবং ইউজার এক্সপেরিয়েন্স উন্নত করতে সাহায্য করে। Task.Run বা async/await প্যাটার্ন ব্যবহার করে আপনি ব্যাকগ্রাউন্ডে ভারী কাজ সম্পন্ন করতে পারেন, এবং TimeTrigger বা UI Interaction ট্রিগার ব্যবহার করে সেই কাজগুলো নির্দিষ্ট সময়ে বা নির্দিষ্ট ইভেন্টে চালাতে পারেন।
এটি অ্যাপ্লিকেশনকে আরও রেসপন্সিভ এবং কার্যকরী করে তোলে, বিশেষ করে যখন ব্যাকগ্রাউন্ড কাজগুলো সম্পন্ন হয় এবং ইউজার ইন্টারফেসে কোনো ব্লকিং ঘটে না।
Read more